package com.xinqi.modules.chat.favorite.service;

import com.xinqi.common.mybatis.data.service.BaseService;
import com.xinqi.modules.chat.favorite.domain.FavoriteTagEntity;
import com.xinqi.modules.chat.favorite.dto.rsp.FavoriteTagResultDTO;
import com.xinqi.modules.chat.favorite.dto.req.FavoriteTagCreateDTO;
import com.xinqi.modules.chat.favorite.dto.req.FavoriteTagUpdateDTO;
import com.xinqi.modules.chat.favorite.dto.req.FavoriteTagDeleteDTO;

import java.util.List;

/**
 * 收藏标签表服务层
 *
 * @author: yyzhen
 * @date: 2023/03/23
 */
public interface FavoriteTagService extends BaseService<FavoriteTagEntity> {

    /**
     * 查询用户标签列表
     *
     * @param keywords
     * @param userId
     * @return
     */
    List<FavoriteTagResultDTO> listByUserId(String keywords, Long userId);

    /**
     * 查询标签详情
     *
     * @param id
     * @return
     */
    FavoriteTagResultDTO findById(Long id);

    /**
     * 添加收藏标签
     *
     * @param dto
     * @return
     */
    Boolean insert(FavoriteTagCreateDTO dto);

    /**
     * 修改收藏标签
     *
     * @param dto
     * @return
     */
    Boolean updateById(FavoriteTagUpdateDTO dto);

    /**
     * 删除收藏标签
     *
     * @param dto
     * @return
     */
    Boolean deleteById(FavoriteTagDeleteDTO dto);

    /**
     * 根据标签名和用户查询标签
     *
     * @param title
     * @param userId
     * @return
     */
    FavoriteTagEntity selectByTitleAndUserId(String title, Long userId);

    /**
     * 收藏，输入标签名（校验标签，有则返回标签ID，没有保存标签并返回标签ID）
     *
     * @param title
     * @param userId
     * @return
     */
    Long checkByTitleAndUserId(String title, Long userId);

    /**
     * 根据标签名集合获取标签ID集合
     *
     * @param titles
     * @param userId
     * @return
     */
    List<Long> checkByTitlesAndUserId(List<String> titles, Long userId);


}
